{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 零基础实战机器学习 源代码\n",
    "\n",
    "第5讲 聚类分组画像\n",
    "\n",
    "作者 黄佳\n",
    "\n",
    "极客时间专栏链接：https://time.geekbang.org/column/intro/438"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>6/1/2020 9:09</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码           消费日期           产品说明  数量     单价    用户码  城市\n",
       "0  536374   21258  6/1/2020 9:09        五彩玫瑰五支装  32  10.95  15100  北京\n",
       "1  536376   22114  6/1/2020 9:32       茉莉花白色25枝  48   3.45  15291  上海\n",
       "2  536376   21733  6/1/2020 9:32  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海\n",
       "3  536378   22386  6/1/2020 9:37       百合粉色10花苞  10   1.95  14688  北京\n",
       "4  536378  85099C  6/1/2020 9:37       橙黄香槟色康乃馨  10   1.95  14688  北京"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd #导入Pandas\n",
    "df_sales = pd.read_csv('易速鲜花订单记录.csv') #载入数据\n",
    "df_sales.head() #显示头几行数据 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt #导入Matplotlib的pyplot模块\n",
    "#构建月度的订单数的DataFrame\n",
    "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) #转化日期格式\n",
    "df_orders_monthly = df_sales.set_index('消费日期')['订单号'].resample('M').nunique()\n",
    "#设定绘图的画布\n",
    "ax = pd.DataFrame(df_orders_monthly.values).plot(grid=True,figsize=(12,6),legend=False)\n",
    "ax.set_xlabel('月份') # X轴label\n",
    "ax.set_ylabel('订单数') # Y轴Label\n",
    "ax.set_title('月度订单数') # 图题\n",
    "#设定X轴月份显示格式\n",
    "plt.xticks(\n",
    "    range(len(df_orders_monthly.index)), \n",
    "    [x.strftime('%m.%Y') for x in df_orders_monthly.index], \n",
    "    rotation=45)\n",
    "plt.show() # 绘图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sales = df_sales.drop_duplicates() #删除重复的数据行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "订单号     0\n",
       "产品码     0\n",
       "消费日期    0\n",
       "产品说明    0\n",
       "数量      0\n",
       "单价      0\n",
       "用户码     0\n",
       "城市      0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.isna().sum() # NaN出现的次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>85920.000000</td>\n",
       "      <td>85920.000000</td>\n",
       "      <td>85920.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>10.115747</td>\n",
       "      <td>3.599711</td>\n",
       "      <td>15338.080389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>49.114285</td>\n",
       "      <td>134.410498</td>\n",
       "      <td>391.309086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-9360.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14681.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>15022.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.950000</td>\n",
       "      <td>15334.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>12.000000</td>\n",
       "      <td>3.750000</td>\n",
       "      <td>15673.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3114.000000</td>\n",
       "      <td>38970.000000</td>\n",
       "      <td>16019.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 数量            单价           用户码\n",
       "count  85920.000000  85920.000000  85920.000000\n",
       "mean      10.115747      3.599711  15338.080389\n",
       "std       49.114285    134.410498    391.309086\n",
       "min    -9360.000000      0.000000  14681.000000\n",
       "25%        2.000000      1.250000  15022.000000\n",
       "50%        4.000000      1.950000  15334.000000\n",
       "75%       12.000000      3.750000  15673.000000\n",
       "max     3114.000000  38970.000000  16019.000000"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.describe() #df_sales的统计信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sales = df_sales.loc[df_sales['数量'] > 0] #清洗掉数量小于等于0的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>84112.000000</td>\n",
       "      <td>84112.000000</td>\n",
       "      <td>84112.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>10.760236</td>\n",
       "      <td>3.005032</td>\n",
       "      <td>15337.732963</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>34.018906</td>\n",
       "      <td>15.365085</td>\n",
       "      <td>392.074855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14681.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>15021.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.950000</td>\n",
       "      <td>15333.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>12.000000</td>\n",
       "      <td>3.750000</td>\n",
       "      <td>15674.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3114.000000</td>\n",
       "      <td>3155.950000</td>\n",
       "      <td>16019.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 数量            单价           用户码\n",
       "count  84112.000000  84112.000000  84112.000000\n",
       "mean      10.760236      3.005032  15337.732963\n",
       "std       34.018906     15.365085    392.074855\n",
       "min        1.000000      0.000000  14681.000000\n",
       "25%        2.000000      1.250000  15021.000000\n",
       "50%        5.000000      1.950000  15333.000000\n",
       "75%       12.000000      3.750000  15674.000000\n",
       "max     3114.000000   3155.950000  16019.000000"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.describe() #df_sales的统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "      <th>总价</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>2020-06-01 09:09:00</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "      <td>350.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>165.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>163.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码                消费日期           产品说明  数量     单价    用户码  城市  \\\n",
       "0  536374   21258 2020-06-01 09:09:00        五彩玫瑰五支装  32  10.95  15100  北京   \n",
       "1  536376   22114 2020-06-01 09:32:00       茉莉花白色25枝  48   3.45  15291  上海   \n",
       "2  536376   21733 2020-06-01 09:32:00  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海   \n",
       "3  536378   22386 2020-06-01 09:37:00       百合粉色10花苞  10   1.95  14688  北京   \n",
       "4  536378  85099C 2020-06-01 09:37:00       橙黄香槟色康乃馨  10   1.95  14688  北京   \n",
       "\n",
       "      总价  \n",
       "0  350.4  \n",
       "1  165.6  \n",
       "2  163.2  \n",
       "3   19.5  \n",
       "4   19.5  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales['总价'] = df_sales['数量'] * df_sales['单价'] #计算每单的总价\n",
    "df_sales.head() #显示头几行数据  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 构建User用户表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>975</th>\n",
       "      <td>16015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>976</th>\n",
       "      <td>16016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>16017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>16018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>16019</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>980 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码\n",
       "0    14681\n",
       "1    14682\n",
       "2    14684\n",
       "3    14687\n",
       "4    14688\n",
       "..     ...\n",
       "975  16015\n",
       "976  16016\n",
       "977  16017\n",
       "978  16018\n",
       "979  16019\n",
       "\n",
       "[980 rows x 1 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.DataFrame(df_sales['用户码'].unique()) #生成以用户码为主键的结构df_user\n",
    "df_user.columns = ['用户码'] #设定字段名\n",
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #按用户码排序\n",
    "df_user #显示df_user"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 求R值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值\n",
       "0  14681   70\n",
       "1  14682  187\n",
       "2  14684   25\n",
       "3  14687  106\n",
       "4  14688    7"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) #转化日期格式\n",
    "df_recent_buy = df_sales.groupby('用户码').消费日期.max().reset_index() #构建消费日期信息\n",
    "df_recent_buy.columns = ['用户码','最近日期'] #设定字段名\n",
    "df_recent_buy['R值'] = (df_recent_buy['最近日期'].max() - df_recent_buy['最近日期']).dt.days #计算最新日期与上次消费日期的天数\n",
    "df_user = pd.merge(df_user, df_recent_buy[['用户码','R值']], on='用户码') #把上次消费距最新日期的天数（R值）合并至df_user结构\n",
    "df_user.head() #显示df_user头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 求F值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值\n",
       "0  14681   70    7\n",
       "1  14682  187    2\n",
       "2  14684   25  390\n",
       "3  14687  106   15\n",
       "4  14688    7  324"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_frequency = df_sales.groupby('用户码').消费日期.count().reset_index() #计算每个用户消费次数，构建df_frequency对象\n",
    "df_frequency.columns = ['用户码','F值'] #设定字段名称\n",
    "df_user = pd.merge(df_user, df_frequency, on='用户码') #把消费频率整合至df_user结构\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 求M值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值\n",
       "0  14681   70    7   498.95\n",
       "1  14682  187    2    52.00\n",
       "2  14684   25  390  1201.51\n",
       "3  14687  106   15   628.38\n",
       "4  14688    7  324  5579.10"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_revenue = df_sales.groupby('用户码').总价.sum().reset_index() #根据消费总额，构建df_revenue对象\n",
    "df_revenue.columns = ['用户码','M值'] #设定字段名称\n",
    "df_user = pd.merge(df_user, df_revenue, on='用户码') #把消费金额整合至df_user结构\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 显示R、F、M值的分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:title={'center':'新进度分布直方图'}, ylabel='Frequency'>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEGCAYAAACNaZVuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAVX0lEQVR4nO3de7SldX3f8fcHZmREYBhguEjEsWqIKXW0GQzqGGRcM6ZluCjamJRIpXZWl6HWgC61rS5t1EhNtFgshi5TkagxSLBG2qAOJBUTxcGEkRoomIw6Uckgd7FDZL7943nO4sxhn5kNc/Zl5vd+rbXXPPv3XPZ3/+acz37277mcVBWSpLbsN+kCJEnjZ/hLUoMMf0lqkOEvSQ0y/CWpQYa/NGFJDkyy/6TrUFsMf02VJOcnOWbW8/2THJvkF5O8tm97dZJnzVrmRUn+oJ/+epJn7uY1jkty8pD1HNb/e1CSlw6x/OIkVyT5qWG23/sg8OZhF07yriS//Bi2Lz3KokkXIAEkOQB4CFgN3JLkh8DDwIPA/sC3gS1JPgMcCZwP/Kt+9b+ftamH5jwf5DjgvcDzZ73+4qraab0kS4DNfdB+DfhokudW1Q92se2TgZ8G/nYX7/X3gH/Q1wpwPHBPknX98ycAf1JV/26eTdwNvBD45Dzb/zzwM3R9N8hBwJer6pd28T60j4sXeWkaJLkGOAIourAPcB5wGfAzs4M5ySF9+78E/jfdTsxy4G/oQm9Lv+jKqnq43wv/KvCNmU0AT+SRcDwEuLmqNsyp6d3AU6rq1f3zdwJPm3net/0U8KfAA3QfOscB24E7Zm8KOAD4T1X1sQHv/Y+Bd1TVVwbMezFwUb/96rezg0d/wB0AvKmq/iTJ1cD7+ulTgTNmv7ckZwKvqKqz576eGlJVPnxM/AEsAa6iC8pLgLV9+y27WCfAocA/Af5b33Y98EzgsFnLHUP3IfFk4OXA7wEr+sffAM+gC/nZ214H3AYsndX2JOBbwK/NU88LgU10H17n7ub9rutrvR64H7hx1vMzdrHep4Bf3c22PwO8GFgK3NrXtInuA+MlwJnARyf9f+5jsg+HfTRxSZ4M/BZwGPDfgdOAg5McCByd5C/p9uy3A/8GeAtwb1WtpxsuOQC4Z9Ym/76q7pr1fD+6veXn8ciwzJn9vAOB04HvAN/t6zkd+Ajw0qq6d2YjVfWjJOuBLyVZAby7qu7p1zkU+B3gnOq+bbwd+N1dvO1D6QL/gjnt7+z7YT4HAz/axfwZ+wFXAvfRfdgV8Kyq2tjv+atxhr+mwQ+BdwE/oRvi+FXgr/v2v62q5yT5MPD7dGPvXwduSLIGeA/dHu6SJCcC/wj4wyRPBF5T3VDKYroPhM/0xxJeBbyif+2Dqur9M4UkOYruAOzrgE8meYjug2NmfHR/4JeAN8y0JXkS3d72U4GPJIFHPrRmvKCqZo/B7+hr+Lk5fXEc8PZd9NUK4D1JZo4HHAx8uqr+/ZzldgBvpPtW8ed035JevIvtqjGGvyauqrYn+ShdSK/oHzuA32DO2Ha/970deLiqrgVOSvJfgT+tqk8luR44u6q2zFrtYLpvCIcDLwLeN2veZ5K8sKq+3G//jiTPqKqfJLkS+M/A16rqcoAk9wBfqqqN/fNj6YJ/I3B0VT2nb79l1vTNdB9sc11RVW+Y3ZDkXfP1U//t4qeBo6rqh33be4C7Bix+FPBWut/xi4GbgA8mWcauv5GoEYa/psU6YAPd0Mwn6M7uuRvYuquVkiwC1tINl8znuH57RwDv7ttmhk4OAJ47e+Gq+kn/744kq4EP9691MPBgVT00a/EH6I43XLqb4ZQdA9pemWTVgFrn2/P/ZWDzTPD3jgS+OWDZO+i++XwvyfnAhcCv0x34/gVg7uuqMYa/psWFwPf76f3pxtzfT7fHuiu/AXy+qmbOrlnMo3+uVwHfqqpbgST5LPAhuqGlN1fVzYM2nOQ1wN1VNROux9IfF5jRHxO4dGaVeWo8gEeGjWb7v3Tj8rOtn6eWw4G30Z3iOtuRwLa5i/e1fS/JhcDP9zVurqq7+mGp+WpVIwx/TVx/8PTpwOvpzvj5JvBv6YLuv8xZ9gi6g8IP9+f8X0d3dtCMS4C7+4PA+wM/phujP3PWMm8F/gdwJ3DGgHoOoTsQew7dNxKSrATOAm7fxVt5wqzpxf03hW8A366qh/vt7M8jF1d+j+7sntlW9sstBnb0B4+fDlxBN7T1+/38Q+mGdn6OR387WjwzUVVvTvKz/Xt5Jo9cf+DvfuP8AdDEVdWWJGvpDrQ+lW6I5gG6sLquX2wJ3R708cDGqjotyQl0wf6h/nz7o/plP0B3EPgX6C4U+zu6Mf/fpDvd8x/SHTg+GvhfSb5G963jnVVVwGvphoJeUFXf67f5K3RBu6srcV8K3VcL4ElVdX9/PGH2BV8vAH6bRy7wunjAdp5Fd8D5AuBLdGc4fZlu2GbGW4FfA66qqv8zZ/1FwMeSzL3I64x+r/+gfntqmBd5aWolecLM+HqSpcD/q6rtu1lnf7o93/3pxuerX/c+4F8AfwV8fdZ2j6IbFvpJVV0zsjezwPpvBj+pAb/A/UHdH805NiHtxPCXpAZ5YzdJapDhL0kN2isO+B5xxBG1YsWKSZchSXuVG2+88c6qWj5o3l4R/itWrGDTpk2TLkOS9ipJvj3fPId9JKlBhr8kNcjwl6QGGf6S1CDDX5IaZPhLUoMMf0lqkOEvSQ0y/CWpQXvFFb57YsVbrt6j9be899QFqkSSpod7/pLUIMNfkhpk+EtSgwx/SWqQ4S9JDTL8JalBIwn/JJcl+UqSzyY5McnWJNf3j+OTLEnyuSQ3Jbk8SUZRhyRpsAUP/ySrgUVVdRJwCHAMcElVre4ftwJnA1uraiWwDFi70HVIkuY3ij3/O4CLZm1/GXBWkhuSXNnv5a8BvtAvcy1wygjqkCTNY8HDv6puq6obkrwM2AHcArytqp5H9y3gZOBw4N5+lfuAw+ZuJ8mGJJuSbNq2bdtClylJTRvVmP/pwOuB04DbgS/2s7YARwJ3Akv7tqX9851U1aVVtaqqVi1fPvCPz0uSHqdRjPkfDbwJWF9V9wPnA69Ksh9wAnAzsBFY16+yBrhuoeuQJM1vFHv+59AN71yT5HrgQeA1wFeBq6rqm8DHgWOTbAbuovswkCSNyYLf1bOqLgQunNP87jnLbAfWL/RrS5KG40VektQgw1+SGmT4S1KDDH9JapDhL0kNMvwlqUGGvyQ1yPCXpAYZ/pLUIMNfkhpk+EtSgwx/SWqQ4S9JDTL8JalBhr8kNcjwl6QGGf6S1CDDX5IaZPhLUoMMf0lqkOEvSQ0y/CWpQYa/JDXI8JekBhn+ktQgw1+SGmT4S1KDDH9JapDhL0kNMvwlqUGGvyQ1aCThn+SyJF9J8tkkByX5XJKbklyezpK5baOoQ5I02IKHf5LVwKKqOgk4BDgX2FpVK4FlwFrg7AFtkqQxGcWe/x3ARbO2/w7gC/3za4FTgDUD2iRJY7Lg4V9Vt1XVDUleBuwA/gK4t599H3AYcPiAtp0k2ZBkU5JN27ZtW+gyJalpoxrzPx14PXAa8ANgaT9rKXBn/5jbtpOqurSqVlXVquXLl4+iTElq1ijG/I8G3gSsr6r7gY3Aun72GuC6edokSWMyij3/c4BjgGuSXA8sBo5Nshm4iy74Pz6gTZI0JosWeoNVdSFw4Zzm35nzfDuwfqFfW5I0HC/ykqQGGf6S1CDDX5IaZPhLUoMMf0lqkOEvSQ0y/CWpQYa/JDXI8JekBhn+ktQgw1+SGmT4S1KDDH9JapDhL0kNMvwlqUGGvyQ1yPCXpAYZ/pLUIMNfkhpk+EtSgwx/SWqQ4S9JDTL8JalBhr8kNWio8E/y9FEXIkkan2H3/D+Q5NokG5IsHWlFkqSRGyr8q+p04OXAw8BXkvxBkpNGWpkkaWQWDbNQP+zzz4F/CnwJuBL4MPCckVUmSRqZocIfuAi4DLiwqrYDJDloZFVNkRVvufpxr7vlvacuYCWStHCGCv+qWp/kwKranuTpVfWtqrpy1MVJkkZj2LN93gX8xyT7Ax9O8vbRliVJGqVhz/ZZV1VvrKqHq2ot8IujLEqSNFrDhv8DSZ6XZL/+LJ/tu1o4yeIkf9RPn5hka5Lr+8fxSZYk+VySm5JcniR7+kYkScMbNvxfC7wZ2Ay8sX8+UJInAjcCa/umZcAlVbW6f9wKnA1sraqV/fy1g7cmSRqFYQ/4/nWS84AnzDTtYtkfA89OcnvftAw4K8kZwHeBVwBr6E4XBbgWOAX4/GMvX5L0eAx7nv9ngIOBbwOhC/9zh3yN24G3VdXVSf4MOBk4HLi3n38fcPyA19wAbAA47rjjhnwpSdIwhj3P/5iq+vnH+RpbgJtnTR8J3AnM3CZiaf98J1V1KXApwKpVq+b9piFJeuyGHfO/Isnrkhz4OF7jfOBVSfYDTqD7INgIrOvnrwGuexzblSQ9TsPu+c9cqvrK/sScqqo1Q657MfBJ4Dzgqqr6ZpJvAS9Pshm4ie7DQJI0JsMe8D0FIMmhwENV9eAQ6zyj//f7wIvnzNsOrH+MtUqSFsiwV/ieneRm4M+A1yZ532jLkiSN0rBj/q8HngvcUVUfpDtjR5K0lxo2/H8EPB8gyVOB+0dWkSRp5IYN/w3ArwNHAR8AXjeyiiRJIzfs2T7bgTf0055zL0l7uWHD/510oX8g8CLgG3hnT0naaw17qudrZqaTPAn4rZFVJEkauWHH/GdbAjxloQuRJI3PsDd2m337he3A5aMpR5I0Do/pCl9J0r5h2D3/v6K7DfNtdLdfvoPugq9h7+8jSZoiw475fwd4WlW9EHga8B2DX5L2XsOG/3JgRT/9NLp78kuS9lLDnuf/r4HfTvIUuj/IsmFkFUmSRm7YA743JPkV4MnA3cD3R1qVJGmkhr2l85uBq4FPAC8BPjrCmiRJIzbsmP+ZVfV84IdV9THgmSOsSZI0YsOG/z1JXg0sSXIycNcIa5Ikjdiw4X8O3R9zuRs4Azh3ZBVJkkZu2AO+f0d3P39J0j5g2AO+/3PUhUiSxmfYYZ+/THLGSCuRJI3NsBd5PR94Q5Kb6f6eb3l7B0nae+0y/JOcV1UXe1dPSdq37G7Y55/NTCS5eMS1SJLG5LH8Ja+fHVkVkqSx2t2Y/5H9PX0CHN1PA1BVnxhpZZKkkdld+H+SR27l8KlZ0zWyiiRJI7fL8K+qd46rEEnS+DyWMX9J0j7C8JekBg17kddjkmQx8IdVdVqSJcCngacAm4FXAwfMbauqfe44woq3XP24193y3lMXsBJJ2tmC7/kneSJwI7C2bzob2FpVK4FlffugNknSmCx4+FfVj6vq2cDWvmkN8IV++lrglHnaJEljMo4x/8OBe/vp+4DD5mnbSZINSTYl2bRt27YxlClJ7RhH+N8JLO2nl/bPB7XtpKourapVVbVq+fLlYyhTktoxjvDfCKzrp9cA183TJkkak3GE/8eBY5NspvvbvxvnaZMkjclITvUEqKpn9P9uB9bPmT2oTZI0Jl7kJUkNMvwlqUGGvyQ1yPCXpAYZ/pLUoJGd7aM9403hJI2Se/6S1CDDX5IaZPhLUoMMf0lqkOEvSQ0y/CWpQYa/JDXI8JekBhn+ktQgw1+SGmT4S1KDDH9JapDhL0kNMvwlqUGGvyQ1yPCXpAYZ/pLUIMNfkhpk+EtSgwx/SWqQ4S9JDTL8JalBhr8kNcjwl6QGGf6S1KCxhH+SE5NsTXJ9/1iZ5HNJbkpyeZKMow5JUmdce/7LgEuqanVVrQZOBLZW1cp+3tox1SFJAhaN6XWWAWclOQP4LvAQ8Ol+3rXAKcDnx1SLJDVvXHv+twNvq6rnAccALwfu7efdBxw2d4UkG5JsSrJp27ZtYypTktowrvDfAnxx1vQOYGn/fClw59wVqurSqlpVVauWL18+jholqRnjCv/zgVcl2Q84AbgAWNfPWwNcN6Y6JEmMb8z/YuCTwHnAVcBHgCuTbAZuAjaOqY4mrHjL1Xu0/pb3nrpAlUiaVmMJ/6r6PvDiOc3rx/HakqRH8yIvSWqQ4S9JDTL8JalBhr8kNcjwl6QGGf6S1CDDX5IaZPhLUoMMf0lqkOEvSQ0y/CWpQYa/JDXI8JekBo3rls7S1PIW2Bq1PfkZG9XPl+GvR9nTMJwEA1h6bBz2kaQGuecv7aFp/Eq/O3tjzVpYhr/2CXvjUNXeymMk+wbDX5og98A1KY75S1KDDH9JapDDPtJeyuMcj41DbDtzz1+SGmT4S1KDHPaRtNdwqGvhGP6SxsoAnw4O+0hSgwx/SWqQ4S9JDXLMX5J2Y188TuGevyQ1yPCXpAZNJPyTLEnyuSQ3Jbk8SSZRhyS1alJ7/mcDW6tqJbAMWDuhOiSpSZMK/zXAF/rpa4FTJlSHJDVpUmf7HA7c20/fBxw/d4EkG4AN/dMHktz6OF/rCODOx7nuuFjjwrDGhWGNC2NBasyFe7T6U+ebManwvxNY2k8vZUAHVdWlwKV7+kJJNlXVqj3dzihZ48KwxoVhjQtj2muc1LDPRmBdP70GuG5CdUhSkyYV/h8Hjk2yGbiL7sNAkjQmExn2qartwPoxvdweDx2NgTUuDGtcGNa4MKa6xlTVpGuQJI2ZV/hKUoP22fCf5quIk5yYZGuS6/vHymmqNcniJH/UTz+qH6ehb+fUOLc/j590jUkuS/KVJJ9NctCU9uHsGqexDxcluSLJl5P87jT+LA6ocer6cT77bPgz3VcRLwMuqarVVbUaOJEpqTXJE4EbZ9UwqB8n2rcDatypP6vq1knWmGQ1sKiqTgIOAc4dUMuk+3BujccwRX3YOxO4qape2Nd33oB6pq3GU5i+fhxoXw7/ab6KeBlwVpIbklwJvIQpqbWqflxVzwa29k2D+nGifTugxp36s9+zmmSNdwAX9dP7Ae8YUMukfz7n1jhtfQjwx8D7kywCDgX+8YB6pq3GMH39ONC+HP5zryI+bIK1zHU78Laqeh7d3sLLmd5aB/XjtPXt3P48mQnWWFW3VdUNSV4G7AD+YkAtE+3DATXewhT1YV/jA1X1IPBlug+rqftZHFDjF5myfpzPvhz+u72KeIK20P2QzEzvYHprHdSP09a3W9i5P49kwjUmOR14PXAa8IMBtUy8D+fUeDvT14eHJzkAeAHdN5MTBtQzbTWuYMr6cT77cvhP81XE5wOvSrIf3Q/0BUxvrYP6cdr6dm5/3swEa0xyNPAmYH1V3T9PLRPtwwE1TlUf9i4AXllVDwMPAu8eUM+01fgfmL5+HGhfDv9pvor4YuA1wFeBq4CPML21DurHaevbnfqzqr7JZGs8h+4r/zVJrgcWD6hl0n04t8YHma4+BPgQcG6SPwd+yODfk2mrcT3T148DeZGXJDVoX97zlyTNw/CXpAYZ/pLUIMNfkhpk+EtSgwx/SWqQ4S9JDfr/pJ53q8oLCI4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_user['R值'].plot(kind='hist', bins=20, title = '新进度分布直方图') #R值直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:title={'center':'消费频率分布直方图'}, ylabel='Frequency'>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_user.query('F值 < 800')['F值'].plot(kind='hist', bins=50, title = '消费频率分布直方图') #F值直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:title={'center':'消费金额分布直方图'}, ylabel='Frequency'>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_user.query('M值 < 20000')['M值'].plot(kind='hist', bins=50, title = '消费金额分布直方图') #M值直方图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 显示手肘图辅助确定K值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cluster import KMeans #导入KMeans模块\n",
    "def show_elbow(df): #定义手肘函数\n",
    "    distance_list = [] #聚质心的距离（损失）\n",
    "    K = range(1,9) #K值范围\n",
    "    for k in K:\n",
    "        kmeans = KMeans(n_clusters=k, max_iter=100) #创建KMeans模型\n",
    "        kmeans = kmeans.fit(df) #拟合模型\n",
    "        distance_list.append(kmeans.inertia_) #创建每个K值的损失\n",
    "    plt.plot(K, distance_list, 'bx-') #绘图\n",
    "    plt.xlabel('k') #X轴\n",
    "    plt.ylabel('距离均方误差') #Y轴\n",
    "    plt.title('k值手肘图') #标题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_elbow(df_user[['R值']]) #显示R值聚类K值手肘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAESCAYAAAD0aQL3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAkCklEQVR4nO3deXxU9bnH8c8DISwie1REBZQWvdad2IqogBsquGvRogU16VWxrV5ra+tSu9hW1C7aekWlKmKVihtQd6JWrbLUotS6YNUCKqIooOzw3D9+JzdDmGQmYSZnZs73/XrNi5kzZ2a+UZgn57eauyMiIsnTKu4AIiISDxUAEZGEUgEQEUkoFQARkYRSAZBEM7OyuDOIxMU0CkiSysy6AP8E9nT3T6Jjq4Ft3H15mvPLgXZAZ6ALsA2wE7A7sL27n94yyUVyQwVASpqZDQZ+7O6D0zw3BhgGfApUAg7sA7wcnVIG7O/ua83sPODK6NxlQEegDfAgsBhYAtzv7p9H7z0aGJvycb9w9ykpn/0I8Gt3fzx6PB4YEb13Om2Bj9z9q035+UUao8tfSSQzM+BC4CLgGWADUAE86+4DonPauftaAHf/A/CHlNePAg5z90sa+IgewDR3/7GZ/YZw1ZBqDbA25fE64FJ3v93M9gB+CYxw943R5+0N3Nj8n1hkcyoAklSnAnsAHwM7AlOB9UB3M5sNtAeOA+bXvsDMZgE7EIpFB6CtmR1G6Evb2t23Tnn/9fU+r7+Z/Szl+K7A2WZm7l5DKACYWRvgf4GtgJlmthtwAfD3NO8pskXUCSyJYWanmdnzZtYTuBZYkPL0p+6+l7v3iK4AltR/vbtXuntPd98B+DbwZ3ffwd23r/flX6s6KianAZ8DbwCvR7cVwH8IBSjVzUA58BTwM6AG+OMW/NgiDdIVgCSCmR0CfB84FOgJTAb6R09vBPYws+dSXrJHymsNKHf3NRk+ow2w0d03EP5tjU9pAloA/BtY7u6vmtlI4Al3f7Xe2/wG+IjwxX8eMMzdPUQQya2ivAIwszZmNrWR50ea2XPR7aPoH78k107AROA9d//E3ee5+//UO2cJcFfKbXHKcxXAIjNbWHsDfgecUu/YIuDI6DVt2fQKAEKzzu1m1tC/uw7A5cD9wEPACcBFZvYqsG+zf3qRBhTdFYCZtQdeAr7c0Dnufg9wT3T+XOCVlkknBao7cDBwk5kd6O7PpzlnFSnt/dFjANz9I0Kn7v9L6QQe3cBnbg9c7+7XRlcAuPvjZrYPYQRROiuB77j7+2Z2BvAr4AZCQdgJOLPRn1KkiYquALj7KmBPM5sPYGYdgDsJl/X/cPfza881s52Bz9z901jCSqF42d3nmtnlwDhgYJpzdgJ+nPK4zxZ+Zn/gr/UPuvuvANI06Vj0/PtmNhY4A7gX+Ku7LzWznWrPEcmVomwCqqcamOfuBwI9zWzPlOdGANPjiSWFxt2fAlab2YnRoVaEDtdWwKvuPqj2RpgLYOlmCpvZ9oQCsSHd55hZBXAI8KKZVRKuVtekPN+HMPIo9fVtUnLeSBil1BrYK+WcovuFTQpbKfyF6g8MjCb8dAF6UdfkM4IwWkMSyt2fBganPB6a8nRb4Kjotr5eJzDAHcBNhP6DVNcRJoydT3rrgNvd/V0zuwLYBXg25flJwBfAP1KOlQG/MLMf1H8zM/tJlPWjBj5PpFmKdiawmc13935m9l1gmbv/0cyOA95293lm1gmY6e67xptUJLPo7+u6qIlTpEWUQhPQLcDRZvYCoTnoP9HxYcDjsaUSaQJ3X64vf2lpRXsFICIiW6YUrgBERKQZVABERBKqqEYB9ejRw/v06RN3DBGRojFnzpyP3b0i3XNFVQD69OnD7Nmz444hIlI0zOy9hp5TE5CISEKpAIiIJJQKgIhIQqkAiIgklAqAiEhClXQBuOYaqKnZ9FhNTTguIpJ0JV0AKivh1FPrikBNTXhcWRlvLhGRQlBU8wCaasgQuOsuGDECjj8eHnsMJk8Ox0VEkq6krwAADj0UWrWCSZPg3HP15S8iUqvkC8Bf/wobon2Xfv/7zfsERESSqqQLQG2b/223gRkcffSmfQIiIklW0gVg1qzQ5j9yJBx1FMyYAX/6UzguIpJ0Jd0JfMkldferquCEE2Dlyk2Pi4gkVUlfAaQ65hjo2RPGj487iYhIYUhMAWjTBs46Cx55BBYsiDuNiEj8ElMAAM4+GzZuhAkT4k4iIhK/RBWAvn3hiCPCqKDaoaEiIkmVqAIAUF0dmoAeeyzuJCIi8UpcARgxArbZRp3BIiKJKwDl5TBmDEybBu+/H3caEZH45K0AmNkdZvaimT1sZpvNNzCzdmY2zczmmtlEM7N8ZanvnHNCH8Af/9hSnygiUnjyUgDMbBBQ5u5fAzoBR6Q5bRSw0N33AroCh+cjSzr9+sHQoXDrrWFUkIhIEuXrCmAx8NsMnzEUeCK6PwNo0XU6q6vh3XfhySdb8lNFRApHXgqAu7/l7jPN7ARgI/B4mtO6A8ui+8uBbuney8yqzWy2mc1esmRJzjIefzx0767OYBFJrnz2ARwLfBsY4e7r05zyMdA5ut85erwZdx/v7gPcfUBFRUXO8rVtC6NHw0MPweLFOXtbEZGika8+gO2A7wHD3X1FA6c9RV3fwFCgxRdprqqC9evh9ttb+pNFROKXryuAbwI9gcfM7DkzO9vMrq13ziSgl5m9AiwlFIQW1b8/HHww3HKLOoNFJHnyshy0u/8K+FWGc9YAw/Px+U1RXQ2jRsHTT4eRQSIiSZG4iWD1nXQSdO2qzmARSZ7EF4B27eDMM+H++yGHg4xERApe4gsAhM7gdevgzjvjTiIi0nJUAIDdd4eBA0MzkHvcaUREWoYKQKS6Gt58E559Nu4kIiItQwUgcsop0LlzGBIqIpIEKgCRDh3CcND77oOlS+NOIyKSfyoAKaqqYM0amDgx7iQiIvmnApBir71g//3VGSwiyaACUE91Nbz2GrzwQtxJRETySwWgnq9/HbbeWp3BIlL6VADq6dgRTj8dJk+Gzz6LO42ISP6oAKRRXQ2rVsGkSXEnERHJHxWANPbdF/bbD26+WZ3BIlK6VAAaUFUFr74KM2fGnUREJD9UABpw2mmw1VbqDBaR0qUC0IBOnWDkSPjTn2D58rjTiIjkngpAI6qrYeVKuPvuuJOIiOSeCkAjKivD7GA1A4lIKVIBaIRZ6Az++99hzpy404iI5JYKQAbf+Aa0b6+rABEpPSoAGXTpEpaHmDQJPv887jQiIrmjApCFqqrw5X/PPXEnERHJHRWALBxwQNg3WM1AIlJKVACyUNsZPHMmzJ0bdxoRkdxQAcjSGWdA27a6ChCR0qECkKVu3cLG8RMnhslhIiLFTgWgCaqqwrIQkyfHnUREZMupADTBQQdB//5qBhKR0qAC0ARmYX2gF16AefPiTiMismVUAJrozDOhvFxXASJS/FQAmqhHDzjxxNAZvGpV3GlERJpPBaAZqqrg009hypS4k4iINJ8KQDMMHgz9+qkZSESKmwpAM7RqFa4Cnn0WXn897jQiIs2jAtBM3/wmlJXpKkBEipcKQDNtuy0cfzzccQesWRN3GhGRplMB2ALV1fDJJ/DAA3EnERFpOhWALXDoodC3L4wfH3cSEZGmy2sBMLM2Zja1kecrzWyhmT0X3frnM0+utWoF55wDNTXw1ltxpxERaZq8FQAzaw/MAQ5v5LSuwE3uPii6vZGvPPkyZgy0bg233hp3EhGRpslbAXD3Ve6+J7CwkdO6AieZ2Uwzm2Jmlq88+dKzJ4wYAbffDmvXxp1GRCR7cfcBzAcud/f9gZ7AIfVPMLNqM5ttZrOXLFnS4gGzUV0NH30EDz8cdxIRkezFXQDeBZ5Mub9N/RPcfby7D3D3ARUVFS0YLXtHHAE77aTOYBEpLnEXgIuAkWbWCvgKUJSLLLduDWefDU88Ae+8E3caEZHstFgBMLO+ZnZtvcM3AmOAl4AH3P21lsqTa2edFUYFqTNYRIqFuXvcGbI2YMAAnz17dtwxGjRiBMyZA++9B23axJ1GRATMbI67D0j3XNxNQCWluho++ACmT487iYhIZioAOXTUUbD99uoMFpHioAKQQ2VloTP40UfhP/+JO42ISONUAHLs7LPDn7fdFm8OEZFMmlQAzKyPmZWnPN4695GKW+/ecOSRoQCsXx93GhGRhmUsAGb2fTPrbmbHAGcAPcxs/+jp+/OarkhVV8OiRaEpSESkUDVaAKLf9reNHn4b2AA4cGV0bHX+ohWv4cPDhjHqDBaRQpbpCmA6MBBYB2yMjm0EMLMOWbw+kdq0CRPDpk8PVwIiIoUo0xf4MODfwG71ju8H3Av8Vz5ClYJzzoGNG2HChLiTiIikl6kAbAUsBf4HOBA4jbCE89/dfQRFunZPS9h5ZzjssLA0xIYNcacREdlcpgJwK9AfqAKeBx4Hbgfei54vuvX7W1J1dZgP8MQTcScREdlcowXA3U8l/JZv0bmfAKcCXczsFBrf7CXxjjsOKirUGSwihSmbTtyVQBlwXfTnWmA08H3gvrwlKwHl5TB6NEydGtYIEhEpJBkLgLv/yN0/dvfHgTuBT9x9DaE/YG6+Axa7c84JE8Juvz3uJCIim2rSME53fxfYO7r/FtA595FKy5e/DIMHwy23hFFBIiKFItNEsO+Y2XlmdpqZ9Taz44CfR88dDvyyJUIWu+rqsFPYjBlxJxERqZPpCmAM8DZwOtAa6AR8Hs0Q/h5waX7jlYYTToDu3dUZLCKFJVMBWOruj1G35MPehKUhJgNXRs1AkkG7dnDmmfDgg/DRR3GnEREJsu0DqN03cjugO9ARrQPUJFVVsG4d3HFH3ElERIJMBWAXM7sa6EaYC/AI8C/gJGCcmfXJb7zSsdtucNBBoTO4iLZhFpESlqkAnAjcDZwPLAfeBNZEr/seYW6AZKmqCt56C555Ju4kIiKZC8AK4CB3fwPYFWgH3ARcDYwFLsxvvNJy8snQpYs6g0WkMDRYAMysLfAT6tb9uQEYFN0Woj6AJmvfHs44A6ZMgY8/jjuNiCRdWUNPRLN9R6YcGufuk/IfqbRVVcENN8DEiXChrp9EJEbZbAnZysyO0Zd/buyxBxxwQGgGUmewiMQpm2GgTmjvlxypqoLXX4fnnos7iYgkWTaLwTnRPAAz+9jMZppZjZnda2ZH5z1hCTr1VOjUKQwJFRGJS1P39H3Z3fcHhgPXAL/PfaTSt9VWMGoU/PnP8OmncacRkaTKtBjcQDOrSjnkAO7+hbvPAaaamTaGb4aqKli9Gu66K+4kIpJUmb68+wIfAzub2QVADzP7cu2T7v5td9cix82w995QWanOYBGJT6YtISe5+wOEXcBWAw8DfzSzOWY2sCUClrKqKpg3D158Me4kIpJE2TbfLHT3W9z9x+5+IHA2cJs6gbfMyJHQsaM6g0UkHtnMA2hNvQlj7v4PYBgaHrpFtt4aTj8d7rkHli2LO42IJE22VwCbjfZx9/cIo4FkC1RVwapVcPfdcScRkaTJZh7ABnd/qIHn1AG8hfbbD/bZB26+WZ3BItKysmkCutLMXoomfz0T3Z41sxlmdlZLhCxlZmHP4LlzYfbsuNOISJJk2wR0lrsPcfdDCNtBHg4cB1yct2QJcvrp0KGDOoNFpGVlmgi2L2Hyl5vZnmb2O8KGMKe6+wrg+hbIWPI6dQojgu6+G1asiDuNiCRFY/sBlAO/AC4gjPjZDfg1cA/R6B93v7UFMiZCVRV88QX86U9xJxGRpGiwALj7Wnc/EugDrAe+C3zq7p8DU8ysS6Y3N7M2Zja1kefbmdk0M5trZhPNzJr6A5SKr341LBWtZiARaSnZjAL6AvgqcIK7fxZ9Sfd3988ae52ZtQfmEPoLGjKKMMlsL6BrhnNL2rhxMHhw6Ah++eVwrKYGrrkm1lgiUsIy9QHcZWZ/BIYAV5vZBGACcKSZ9Wvste6+yt33JGwf2ZChwBPR/RnR5yRSZWXoA2jTJlwF1NSEZaMrK+NOJiKlqsEtISNXENYB2hW4Eqgd9/8cMAb40RZ+fnegdg7scqB//RPMrBqoBthpp5228OMK15AhYXnoo46C224Ls4OnTAnHRUTyIdNicP9294XApe6+wN0XufsiYCp1m8VviY+BztH9ztHj+hnGu/sAdx9QUVGRg48sXEOGwDnnwNq14fFXvhJvHhEpbZmagMzMhrj706nH3f0jdx+fg89/Cjgiuj8UqMnBexatmhq4914YMyZsFHPQQWFkkIhIPmRqAgK4wsx2AToBjxDG/q8DDOgAHOPuqzO9iZn1Bc5399TJY5OAE83sFWAuoSAkUm2b/+TJ4Upg553h8svh0EPD3sFl2fyfEhFpgka/Vtzdo5GZrwODgH2Btu5+lJl9BTgW6AJ82Mh79Iv+fId6M4fdfQ1aUA6AWbPqvvwBLrsMli6FX/8a/vu/Q8dwcgfJikg+ZPN75TbA0cCOwAJCy9DPgT7u/o18hkuSSy7Z/Nj114f9An76U9hhB/jxj1s8loiUsEx9ANcDHwFHAr8FDgA6Aj8lXBVInl11VegTuOoqTRITkdzKNBHshujPz4BKoDWwPfAdoFv+Ykkts7BU9FFHhaagadPiTiQipSLTMNB3gHJCIdiHMP7/DWARcGLe0wkQJodNngz77hs6irWHsIjkQjbLQa8FBgJbpbzmWWCwmZXuzKwC07EjTJ8O228Pw4fDm2/GnUhEil2jncDRuj9GaP+HMGt3N+CqlNefkbd0solttoFHH4WBA2HYMHjhBdhuu7hTiUixyjQKaF/gomj2b63L4P83iz8lX8EkvX79wpXA4MFwzDHw9NNhc3kRkabK1AR0PfAPgGhLyKlm9nT03EbgW/mLJg2prAzrBs2dCyefDOvWxZ1IRIpRpgKwMWXjd3f3EYQdwnDXFuZxOvpoGD8eHn88rB+k/xsi0lRaYKCInXUWLFoEV1wBvXrB1VfHnUhEikmmAjAr2tHLgS/M7GHg85RjM/MdUBp32WWhCPziF6EInH9+3IlEpFhkKgD3EWb+bgTeJyz+9oW7v2VmV7n7lfkOKI0zgxtvhA8+gAsuCMNETzgh7lQiUgwy9QH8EuhH2KnrZ8BRwDAzOxI4zsza5jmfZKGsLGwm/9WvwmmnhdVDRUQyyVQALFr3fzJhOejFwBfADsC7hOUhpAB06ABTp0Lv3nDssfCvf8WdSEQKXaYC8C8zu5Mw9n86sJKwMNxhhDWBjmjktdLCevQIE8XKy8NEsfffjzuRiBSyTPsBnJfm8D0AZtYb+K98hJLm69sX/vIXOOSQsIDcs89C586ZXyciyZPNWkBpuft77v5ILsNIbuy7L9x/P7z2WugQXrMm7kQiUoiaXQCksB1+OEyYELaaHDMGNm7M/BoRSRZNBCthZ5wR+gF+8IMwR2DcuLgTiUghUQEocZdcAgsXwrXXhiLw3e/GnUhECoUKQIkzg9/8JlwJXHRRmCh26qlxpxKRQqA+gARo3RruugsOPDA0Cz39dNyJRKQQqAAkRPv28NBDsMsucPzx8OqrcScSkbipACRIt25hothWW4U5AgsWxJ1IROKkApAwO+0EjzwCK1aEIvDpp3EnEpG4qAAk0J57woMPho3ljz8eVq+OO5GIxEEFIKGGDIE77wxLRZxxhiaKiSSRCkCCjRwJ110H990HF16obSVFkkbzABLuoovCRLFf/xp22AG+9724E4lIS1EBEK69NkwUu+SSMFHsG9+IO5GItAQVAKFVK7jjDli8OCwct+22cNhhcacSkXxTH4AA0LYtPPAA7LornHgi/OMfcScSkXxTAZD/16VLmCPQpUuYI/DuuzEHEpG8UgGQTfTqFYrA6tVhW8lPPok7kYjkiwqAbGb33eHhh8MVwIgRsGpV3IlEJB9UACStgw6CSZPgxRfhtNNgw4a4E4lIrqkASINOOgl+97uwiugFF2iimEip0TBQadTYsWGi2K9+FSaK/fCHcScSkVxRAZCMrr4aFi2CH/0oTBQbPTruRCKSC3lpAjKzdmY2zczmmtlEM7M051Sa2UIzey669c9HFtlyrVrBbbeFyWHnnBP2FBCR4pevPoBRwEJ33wvoChye5pyuwE3uPii6vZGnLJID5eUwZQrssQecfDLMnh13IhHZUvkqAEOBJ6L7M4Ahac7pCpxkZjPNbEq6qwQpLJ06hTkCFRVwzDHw9ttxJxKRLZGvAtAdWBbdXw50S3POfOByd98f6AkckqcskkPbbReagFasgIMPhiVL6p6rqYFrrokvm4g0Tb4KwMdA5+h+5+hxfe8CT6bc3ybdG5lZtZnNNrPZS1K/bSQ2/fuHL/r33w/zBVasCF/+p54KlZVxpxORbOWrADwFHBHdHwrUpDnnImCkmbUCvgLMS/dG7j7e3Qe4+4CKioq8hJWmGzsWfvpTeOMN6NEDjj46jBI6RNdxIkUjXwVgEtDLzF4BlgJvm9m19c65ERgDvAQ84O6v5SmL5Mlll4UhoWvXhpnCF14Iu+wCl18e9hsWkcJmXkTTOwcMGOCzNfykYNQ2+5x7LvzhD/Ctb4XRQU8+GfYY/trXwn7DX/86dO8ed1qRZDKzOe4+IN1zWgpCmqX2y3/yZPjJT+DPf4bx4+EHP4AFC2DcOPj8czj/fOjZE044Iew3sGZN3MlFpJYKgDTLrFnhy39INMB3yJDweNasMFv44ovhlVfg5ZfDOkJ/+1vYaKZnTzjvvLDIXBFdfIqUJDUBSYtYvz40Dd15Jzz4YFhi+ktfCk1Eo0ZB375xJxQpTWoCktiVlYUNZu6+Gz78ECZMCJvPXHEF7LxzmFNwyy3w2WdxJxVJDhUAaXGdOoXN52tqwqYzP/95mFBWXR0mmn396zBtGqxbF3dSkdKmAiCx6t07LDH92mswc2YoAjNmhJ3IevWC73wH5sxRf4FIPqgASEEwC7OIf/e7sPT0Qw+FSWX/+78wYEDYpvKXvwwjjEQkN1QApOCUl8Oxx4ahpR9+CDffDN26waWXhiuGQw+FO+4IS1CISPOpAEhB69o1NAs99xzMnw9XXhn6DUaPhm23DSOIHntMexaLNIcKgBSNXXYJBWD+fHj+eTjzTJg+PYwu2nHHurkHIpIdFQApOmYwcGDoH/jwQ7jvPth/f/jtb2GvvWDvveG66+CDD8L511wTRhyl0tLVIioAUuTatoWTTgqTyz74AG64IRy7+OKwif2wYbBsWVi2orYIaOlqkUAzgaUkvf463HUXTJwI//kPtGsXhpKefHLoM0hdxkKklGkmsCTOrrvCz34G77wDTz8Np58eCsCkSbB8eWg+mjgRPk63VZFIQqgASElr1SrMJxg1KsxAPuWUcOyJJ0In8rbbwqBBYY7BvHmacCbJogIgJS916erJk+Evf4HWrcMeBpddFhamu/RS2GOPsC7RBReEZiItXS2lTgVASl5DS1evWAFXXRWWmli4MEw422MPuO220HncvXtYwnrCBFi8ON6fQSQf1AksUs+qVWE9omnTwm3hwnB8//1h+PCwTtFee4XhqCKFrrFOYBUAkUa4w9y5dcVg5sxwrFevumIwdCi0bx93UpH0VABEcmTx4tCHMG0aPP542PayffuwPtHw4eHWq1fcKUXqqACI5MGaNfDMM6EYTJ0a1igC2GefuquD/fYLo45E4qICIJJn7mFPg9qmohdegI0bwzDTY44JxeCww6Bjx7iTStKoAIi0sE8+gUceCcXg0UfDchTl5WEE0ogR4Qqhd++4U0oSaCawSAvr3j1MPrvnnrDd5YwZMHZsmJk8diz06ROGnP7wh+FqIXU5ay1eJy1FBUAkz9q0Cb/5X3cdvPFGuF13HVRUwLhxcOCBoanozDPDJji77abF66RlqAlIJEaffRZmHU+bFkYXLV0KZWXh6uDNN8PidVOnhsIwdGjcaaUYqQ9ApAisXw8vvljXkfzPf9Y9t9VW0K9fuH3pS3X3+/WD7bfXpDRpWGMFoKylw4hIemVlYWG6QYPgyCPDb//DhsHDD8MRR4Rhp6++Gh6vW1f3uvbtNy0IqQWiVy8NQ5WGqQCIFJjaNv/77gt9B6mL2Q0ZEq4UFiwIW2O+9Vb4c/78sAfC9Omwdm3de7VrF7bSTFcgdtghLIonyaUCIFJgGlq8btascL+sDPr2DbfDD9/0tRs2hLWLaotCaoF47DFYvbru3PLysPpp/SalL30p7LFcpm+Hkqc+AJGE2LgRFi1KXxzmzw+L4NVq0yYUmHR9Dn361BWHa64Jo5NSd1erqQnF6pJLWvTHkwaoD0BEaNUq/Ga/446bb4fpDu+/v2lBqC0QzzwDX3xRd25ZWSgC/fqFJqaf/AR+9CM49tgwG/q88+Dee1v0R5Nm0hWAiDTKPSyCV/+KofbxihWbv6asDLp0SX/r3Dnzcx075mdkUxKvWHQFICLNZgbbbRduBx206XPuYabz978Pt98ORx8NBx8c5jfU3pYtC38uWlR3LLW5KZ3WrTcvFNkUjtrb1lunH/1UWblph3pqB3sSqQCISLOZhfkK06bB5ZfDTTfBxRdv3sRU39q1dYWh/i3d8WXLwhVH7ePPP8+cq7Yo1C8OBx8c1mI64AB46SU499xwhfPww2FIbYcOdbfUx+3ateyQ2pa4WlEBEJFmqz9EdciQTR83pLw8LIVRUdG8z12/PhSFphSRd96pO75yJTz1VHivceOy/9x27dIXh0yPm/pcWVnLXK2oAIhIs2UaspovZWVhwb3u3Zv+2tov0rPPhltvhRtvhL33DkVh5crQPFV7P9Pj1PtLl6Y/tzndrG3ahGLQunVYRrxnzzARMFNhbSoVABFptnRNEbVXAoWo/hXLkUdmd8XSXO7hi7s5xaX28d/+BvPmhSa2XGdUARCRxGjpKxaz0GzUrh1069b019fUwAMP1PWv5Lq45mUYqJm1A+4DdgReAc70eh+UzTn1aRioiCRF/auV+o+zFceGMKOAhe6+F9AVOLyZ54iIJFJjVyu5kq8moKHAlOj+DGAI8HgzzhERSaSW6F/J1xVAd2BZdH85kK71K5tzREQkT/JVAD4GOkf3O0ePm3MOZlZtZrPNbPaSJUtyHlREJKnyVQCeAo6I7g8Fapp5Du4+3t0HuPuAiubOGhERkc3kqwBMAnqZ2SvAUuBtM7s2wzlP5SmLiIikkZdOYHdfAwyvd/jiLM4REZEWUlTLQZvZEuC9Zr68Bw30MxSgYsoKxZW3mLJCceUtpqxQXHm3JGtvd0/bfl5UBWBLmNnshiZDFJpiygrFlbeYskJx5S2mrFBcefOVtQUXNxURkUKiAiAiklBJKgDj4w7QBMWUFYorbzFlheLKW0xZobjy5iVrYvoARERkU0m6AhARkRSJKABm1sbMpsadIxtmdoeZvWhmD5tZQe/XYGZlZvZnM3vezCbEnScbZnaRmT0Zd45MzKzSzBaa2XPRrX/cmRpjZpdEf28fMbPyuPM0xswGp/x3XWBm34w7U0PMbCszeyj6N3ZNrt+/5AuAmbUH5lAEy02b2SCgzN2/BnSibqmMQnU8MNfdDwR6mtne8cZpnJn1Bgr2H3s9XYGb3H1QdHsj7kANMbOdgd2jv7ePADvEHKlR7v507X9Xwl4kL8edqRHfAF6M/o3tbma75fLNS74AuPsqd98TWBh3liwsBn4b3S+G/zePAtdHVypdCKu6FrLfApfGHSJLXYGTzGymmU0xM4s7UCMOBbqa2bPAQcA7MefJipl1APq5+ytxZ2nEZ0BHM2sNtAfW5vLNi+FLJjHc/S13n2lmJwAbKfD9Edz9c3dfCTwPLHb3f8edqSFmdjowF3gt7ixZmg9c7u77Az2BQ2LO05gKYIm7H0z47X9QzHmydTiFvwbZA8Aw4G3gX+7+di7fXAWgwJjZscC3gRHuvj7uPI0xs+5m1hYYSPgNsEC3AgfCulOHAvcA+5nZ2JjzZPIu8GTK/W1iS5LZcqC2ierfQK8YszTFCGBa3CEyuJTQFNgH6GZmA3P55ioABcTMtgO+Bwx39xVx58nC/wCnuPsGYCXhErUgufvpUZvvSGCOu98Yd6YMLgJGmlkr4CvAvJjzNGYOULtMQT9CEShoUZPaYMJuhIVsa2B1dH8N0DGXb64CUFi+SbjcfywaoXBW3IEy+D1wlpn9DfgEeCzmPKXkRmAM8BLwgLsXbNOVu/8N+MTMZgFvuPvMuDNloRJ4zd1XZzwzXr8Hzo3+jbUnx01WmggmIpJQugIQEUkoFQARkYRSARARSSgVABGRhFIBENkCZjbazEbHnUOkOVQAREQSSgVAJAfMbHczqzGzrePOIpKtgl5uWKRI9AQmAcOKZAa3CKArAJFcGEtYbbZ33EFEmkIFQGTL/RQ4N/pTpGioAIhsudXuvgB4PVrNVaQoaC0gEZGE0hWAiEhCqQCIiCSUCoCISEKpAIiIJJQKgIhIQqkAiIgklAqAiEhC/R8J2txVHyK4LAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_elbow(df_user[['F值']]) #显示F值聚类K值手肘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAESCAYAAAASQMmzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAmc0lEQVR4nO3de7iVZZ3/8feHM4gi4mYkDfEwkYVouiFHMdwkCLLMUdPLysaw39DVccrJGq+GNKdpynE6TDbOOE0nx5lJM0tRE0WksBQ2GWiWCR7RUhQVDxxEvr8/7mfBZrP2Xhv2WvtZh8/ruta11noOa303yv5w389z37ciAjMzM4B+eRdgZma1w6FgZmbbOBTMzGwbh4KZmW3jUDDrRNKAvGswy4t895HZdpL2Bn4LTIyI57JtG4HREbG+xPGDgCHACGBvYDQwFngr8IaIeG/fVG5WGQ4FazqSTgAujogTSuybA8wEngcmAQG8Dbg3O2QAMDkiNkv6CHBRduyLwHBgIPAT4GlgLfDjiHg5++wPAB/r8HX/FBHXdfjuW4CvRcSC7P2VwCnZZ5cyGHgmIt6+Kz+/WXfcTDbLSBLwKeB8YDHwOtAC/DwiWrNjhkTEZoCI+Dfg3zqcfw5wYkR8pouv2BeYHxEXS/o6qXXR0SZgc4f3rwEXRsT3JB0OfBk4JSK2Zt93JHD57v/EZjtzKJhtdxZwOPAs8EbgRmALMEpSOzAUOBVYVTxB0jLgAFKADAMGSzqRdL1uz4jYs8Pnb+n0feMlfbHD9jcDH5SkiFhECgUkDQT+HdgDWCrpMODjwK9LfKZZr/hCszU1Se+RdJekMcBlwBMddj8fEUdExL5ZS2Ft5/MjYlJEjImIA4BPANdGxAER8YZOgVA0NwuY9wAvAw8Cv88eLwGPk0Kpo/8ABgELgS8Ci4Dv9uLHNuuSWwrWtCRNBT4LvBMYA1wDjM92bwUOl7SkwymHdzhXwKCI2FTmOwYCWyPiddLftys7dB89ATwMrI+I+ySdDdwWEfd1+pivA8+QwuAjwMyIiFSCWWU1TEtB0kBJN5Y5Zg9JHS/s7SvpF5Luk/Tl6ldpNWQscBXwWEQ8FxH3R8TfdjpmLfDfHR5Pd9jXAjwpaU3xAfwrcGanbU8CJ2XnDGbHlgKkLqHvSerq7+IwYB7wY+CnwGnA+ZLuA47a7Z/erAsNEQqShgLLgendHHMQsBQ4osPmTwI3ZdtmSXpTFcu02jKKdGdPi6TjujhmA+n6QfGxobgjIp7JupUOKD7Ysfuo+BgdETdnp70B+GrWFfW/2ecsILVQhndRw6vA30TEsaRbZb9CutYxlXRNwayiGqL7KCI2ABMlrQKQNAz4AalL4DcR8dGIeAR4a/GYzDTg4xGxVdJioA34Qx+Xb/m4NyJWSJoH/DNwbIljxgIXd3g/rpffOR74ReeNEfEVgBLdQcr2PyXpY8D7gR8Cv4iIdZLGFo8xq5SGaCmUMBe4PyKOA8ZImtjFcaPYfg/4emCfvijOakdELAQ2Sjo929SPdFG3H3BfREwpPkhjFVRqxLOkN5BC4/VS3yOphfSv+7slTQLeRLoFtbh/HOmOp47nD+xQ5+Wku6P6s2NrtyH+YWe1o1H/hxoPHJsNUtob2B9YWeK4Z9l+r/gI4LE+qM1yFhF3Aid0eD+tw+7BwKzssaXThWaA7wNXkK5HdPQvpEFuH+3ia18DvhcRj0r6PHAI8PMO+68GXgF+02HbAOCfJP1d5w+TdElW6zNdfJ/ZbmmoEc2SVkXEoZI+CbwYEd+VdCqwOiLu73hM9voSUj/xV0h/GU+PiFWlP92sb0naC3gt6x416xON2n30n8DJkn5J6kp6vIvj/hU4mdSKuMmBYLUkItY7EKyvNVRLwczMeqdRWwpmZrYbHApmZrZN3d99tO+++8a4cePyLsPMrG4sX7782YhoKbWv7kNh3LhxtLe3512GmVndkNTl7fdV6z6S9H1Jd0u6oYvBPkMkzZe0QtJVSnbaVq36zMxsZ1UJBUlTgAERcQywFzCjxGHnAGsi4ghgJGneolLbzMysj1SrpfA08I0y3zENuC17fQdp3qFS28zMrI9UJRQi4qGIWCrpNNK89AtKHFZq3qEezUUkaa6kdknta9futO6JmZntpmpeU3gXaSrhUyKi1JKBnecderaLbTuJiCsjojUiWltaSl5ANzOz3VCtawr7ARcAhYh4qYvDFrL9WsM00qpSpbZV1KWXwqJOn7poUdpuZtbsqtVSOJe0lsGtkpZI+qCkyzodczWwv6SVwDpSIJTaVlGTJsFZZ20PhkWL0vtJkyr9TWZm9afu5z5qbW2NXR2ncOutcMYZcOqpsGABXHMNtPmStpk1CUnLsxUAd9KU01xMnw4S/M//wIc/7EAwMytqylBYvBi2bIFBg+CKK3a+xmBm1qyaLhSK1xA+9znYvBn+7u92vMZgZtbMmi4Uli1L1xA++UkYPBiefDK9X7Ys78rMzPLXlBeai2bNgtWr4Q9/qHBRZmY1zBeau1AowEMPORTMzIqaOhRmz07P8+fnW4eZWa1o6lAYNw4mTHAomJkVNXUoQOpC+sUv4IUX8q7EzCx/DoVCGrOwoNQ8rmZmTabpQ+GYY2CffdyFZGYGDgX690+3pt58M7z+et7VmJnlq+lDAVIX0nPPwT335F2JmVm+HArASSelFoO7kMys2TkUgJEjYcoUh4KZmUMhUyjAfffB44/nXYmZWX4cCplCIT3fdFO+dZiZ5amqoSBpoKQbu9l/QrZc5xJJT0g6V9IkSWs6bB9fzRqLxo+HQw5xF5KZNbeqhYKkocByYHpXx0TEnRExJSKmACuBe4GRwBXF7RHxYLVq3LHe1FpYuBBeeaUvvtHMrPZULRQiYkNETATWlDtW0jDg0IhYSQqFMyQtlXSdJFWrxs4KBdi0Ce64o6++0cysttTKNYXpwMLs9SpgXkRMBsYAU/uqiHe8A4YPdxeSmTWvWgmFU4Dir+JHgds7vB7d+WBJcyW1S2pfu3ZtxYoYNCiNWZg/H+p87SEzs92Seyhk3UMnAMVOm/OBsyX1AyYA93c+JyKujIjWiGhtaWmpaD2FAjz1FPzmNxX9WDOzutBnoSDpIEmXldg1CXggIjZm7y8H5gD3ANdHxAN9VSOkeZAkdyGZWXNq6jWau/L2t6dnz4VkZo3IazTvokIBli6Fp5/OuxIzs77lUCihOLr55pvzrcPMrK85FEo48kh4wxs85YWZNR+HQgnF0c233gqbN+ddjZlZ33EodKFQgJdfhp//PO9KzMz6jkOhC+98JwwZ4ltTzay5OBS6MGwYTJsGN97o0c1m1jwcCt0oFODhh+HBPpmn1cwsfw6FbsyenZ7dhWRmzcKh0I2xY2HiRIeCmTUPh0IZhQIsWQLPP593JWZm1edQKKNQgNdfT2MWzMwanUOhjMmTYd993YVkZs3BoVBG//5pOu1bbkktBjOzRuZQ6IFCAdatg7vvzrsSM7Pqcij0wIwZMGCAu5DMrPE5FHpg773h+OMdCmbW+BwKPVQowP33w6OP5l2JmVn1VDUUJA2UdGM3+ydJWiNpSfYYL2mIpPmSVki6SpKqWWNPFRfe8RoLZtbIqhYKkoYCy4Hp3Rw2ErgiIqZkjweBc4A1EXFEtr+78/vMm94Ef/7n7kIys8ZWtVCIiA0RMRFY081hI4EzJC2VdF3WKpgG3JbtvwNoq1aNu6pQgDvuSOssmJk1oryvKawC5kXEZGAMMBUYBbyY7V8P7NP5JElzJbVLal+7dm2fFVsopJXYFi7ss680M+tTeYfCo8DtHV6PBp4FRmTbRmTvdxARV0ZEa0S0trS09EGZyZQpsNde7kIys8aVdyicD5wtqR8wAbgfWAjMyPZPAxblVNtOBg2Ck05KF5u3bs27GjOzyuuzUJB0kKTLOm2+HJgD3ANcHxEPAFcD+0taCawjhUTNKBTgj3+Ee+/NuxIzs8obUO0viIhDs+dHgE932vdH4IRO2zYBhWrXtbtmzQIpdSEdfXTe1ZiZVVbe3Ud1p6UF3v52j1cws8bkUNgNhQIsWwZ/+lPelZiZVZZDYTcURzfffHO+dZiZVZpDYTdMnAgHHOBbU82s8TgUdoOUWgsLFsCmTXlXY2ZWOQ6F3VQowCuvwOLFeVdiZlY5DoXdNG0aDB3qLiQzaywOhd00dCi8850pFCLyrsbMrDIcCr1QKMAjj8Dvfpd3JWZmleFQ6IXZs9Ozu5DMrFE4FHrhgAPgyCMdCmbWOBwKvVQowF13wbp1eVdiZtZ7DoVemj07TaN96615V2Jm1nsOhV6aNClNkucuJDNrBA6FXurfH04+GW65BbZsybsaM7PecShUQKEAzz8Pv/pV3pWYmfWOQ6ECZsyAAQPchWRm9c+hUAF77QVTpzoUzKz+VTUUJA2UdGOZY74v6W5JN0gaIGmSpDWSlmSP8dWssVIKBXjgAXj44bwrMTPbfVULBUlDgeXA9G6OmQIMiIhjgL2AGcBI4IqImJI9HqxWjZVUXHjHy3SaWT3bpVCQNE7SoA7v9+zq2IjYEBETgTXdfOTTwDc61TISOEPSUknXSdKu1JiXQw+F8ePdhWRm9a1sKEj6rKRRkmYD7wf2lTQ52/3j3nx5RDwUEUslnQZsBRYAq4B5ETEZGANMLVHTXEntktrXrl3bmxIqqlCAO++El17KuxIzs93TbShkrYI/y95+AngdCOCibNvG3hYg6V3ZZ58SEVuAR4Hbs92PAqM7nxMRV0ZEa0S0trS09LaEiikUYPNmuP328seamdWici2Fm4BjgddI/5Kn+CxpWA/O75ak/YALgEJEFP99fT5wtqR+wATg/t58R1867jgYMcJdSGZWv8r9Up8JPAwc1mn70cAPgbf09IskHSTpsk6bzyV1Ed2a3Wl0HnA5MAe4B7g+Ih7o6XfkbeBAmDkTbr45zYdkZlZvBpTZvwewDvhb4DjgANJ1hF9HxCnlbjcFiIhDs+dHgE932vcV4CslTjuhbOU1avZs+OEP4de/htbWvKsxM9s15VoK3wbGA38N3EW6EPw94LFsf13cGdSXZs0CyV1IZlafug2FiDiL1Kev7NjngLOAvSWdSfe3mzalffeFv/gLh4KZ1aeeXCh+ldTN9C/Z82bgA8BngR9VrbI6VijA8uXw1FN5V2JmtmvKhkJEfC4ino2IBcAPgOciYhPwHmBFtQusR8XRzTffnG8dZma7apduKY2IR4Ejs9cPASMqX1L9mzABxo51F5KZ1Z9yg9f+RtJHJL1H0oGSTgX+Mds3HfhyXxRZb6TUWrjtNtjY6+F9ZmZ9p1xLYQ6wGngv0J80ad3L2UjnC4ALq1te/SoU4NVX07QXZmb1olworIuIW9k+ncWRpGkvrgEuyrqQrIS2Nhg2zF1IZlZfenpNIbLn/YBRwHAqMO9RIxsyBE48MYVCRPnjzcxqQblQOETSl4B9SGMVbgF+B5wB/LOkcdUtr74VCvDYY/Db3+ZdiZlZz5QLhdOB/wE+CqwH/gBsys67gDR2wbpw8snp2QvvmFm9KBcKLwHHZ6ufvRkYAlwBfAn4GPCp6pZX3/bfH446ytcVzKx+dBkKkgYDl7B9nqNvAlOyxxp8TaFHCgX45S/huefyrsTMrLwuZ0nNRi2f3WHTP0fE1dUvqbHMng2XXAI/+xm87315V2Nm1r2eLMfZT9JsB8LuaW2F0aPdhWRm9aEnt6QG6fqB7YZ+/VJr4Wc/g9dey7saM7Pu9WRCvCAbpyDpWUlLJS2S9ENJJ1e9wgZQKMALL6RrC2ZmtWxX11i+NyImAwXgUuBb3R0saWB3q7NJGiJpvqQVkq5SstO2Xayx5kyfnpbqdBeSmdW6chPiHSvprztsCoCIeCUilgM3Sir5GZKGAsuB6d18xTnAmog4AhiZHVtqW13bc0844QSHgpnVvnIthYOAZ4GDJX0c2FfSm4o7I+ITEVFyifqI2BARE+l+dbZpwG3Z6zuAti621b1CAX7/e1i1Ku9KzMy6Vm45zqsj4nrSamsbgRuA70paLunYCnz/KODF7PV60nQapbbVvdmz07NHN5tZLevpNYU1EfGfEXFxRBwHfBD4rwpcaH6W7Qv1jMjel9q2A0lzJbVLal+7dm0vS+gbhxwChx3mLiQzq209GafQn06D3CLiN8BMen+r6kJgRvZ6GrCoi207iIgrI6I1IlpbWlp6WULfKRRg8WJ46aW8KzEzK62nLYWd7jKKiMdIdyH1iKSDJF3WafPVwP6SVgLrSIFQaltDKBTSWIXbbit/rJlZHhR1Ptl/a2trtLe3511Gj2zZAi0tcNpp8J3v5F2NmTUrScsjorXUvi7nPupw8kXAycCrbG9ZCNgC/HdE+NdbDw0YALNmpYvNW7em0c5mZrWkp7+WzouItoiYSlqKczpwKvDpqlXWoGbPhmeegTpp3JhZkyk3eO0o0oC1kDRR0r+SFtk5KyJeAr7aBzU2lJkzUwvBdyGZWS3qbj2FQcA/AR8n3Wl0GPA14P/I7jqKiG/3QY0NZdQoOPZYh4KZ1aYuQyEiNkfEScA40vWDTwLPR8TLwHWS9u6LAhtRoQD33gtPPpl3JWZmO+rJLKmvAG8HTouIF7IJ6sZHxAvVLq5RFbIbeT262cxqTbd3H0n6b+A10vxDX8omLBUwXdKhEeGZfHbDW94C48alLqS5c/Ouxsxsu3K3pH6eNO/Rm4GLgOLkd0uAOcDnqlda45JSa+G//gs2bIChQ/OuyMwsKTch3sMRsQa4MCKeiIgnI+JJ4EbgsT6psEEVCikQFu00iYeZWX7K3ZIqSW0RcWfH7RHxTERcWdXKGtzUqbDHHr6uYGa1peyIZuDzkg4B9gJuIY1NeI10bWEYMDsiNlavxMY0ZEhakW3+fLj88tSlZGaWt3LdR8WJkX4PDAKOAgZHxLuAC0mT1e1dzQIbWaEAjz8O99+fdyVmZklPWgqjSXMfvRF4gtSr9I/AuIh4XzWLa3QnZ6tRzJ8Phx+eby1mZlD+msJXgWeAk4BvAH8BDAf+gdR6sF4YMwZaWz262cxqR7nBa9/Mnl8AJgH9gTcAf0ODLJOZt9mz4Ve/gmd3Wl/OzKzvlbum8AjpWsI3gbeRxic8CDwJnF716ppAoQARcMsteVdiZtazqbM3A8cCe3Q45+fACZLGVquwZnHUUbDffu5CMrPaUG6aC5FuPf1GtulF0mypX+hw/vurVl0T6NcvdSFde21aqnPgwLwrMrNmVq6lcBRwfnEkc0S8HBF/HxFzgP8HlBx6JWmIpPmSVki6KguXzsecIGlJ9nhC0rmSJkla02H7+N7/iLWvUID162HJkrwrMbNmVy4Uvgr8BkDSIkk3Sroz27cV+FAX550DrImII4CRpJXadhARd0bElIiYAqwE7s2OvaK4PSIe3NUfqB6deCIMGuQuJDPLX7lQ2BoRxUnwIiJOIa3E1nFgWynTgNuy13eQZlktSdIw4NCIWEkKhTMkLZV0XakWRiMaPhza2hwKZpa/ai0dP4p0/QFgPd3fvjqdNDIaYBUwLyImA2OAqVWqr+YUCvCHP8BDD+VdiZk1s3KhsCzrMroBeCV7frnDtqVdnPcsMCJ7PSJ735VTgOK/kR8Fbu/wenSpEyTNldQuqX3t2rVlfoT6MHt2evYEeWaWJ3XXCyRpMmkE81bgKdIEeK9ExEOSvhARF3Vx3nnA2yPiQ5JuAr4WEbeXOE7AQ8CEiNiYTZ/xB+Aq0rWMsyPige5+gNbW1mhvb+/Bj1r7JkxIt6fevtOflJlZ5UhaHhGtpfaVayl8GTiUdE3gi8AsYKakk4BTJQ3u4ryrgf0lrQTWAaslXVbiuEnAAx1mWb2ctHjPPcD15QKh0RQKsHhxuhPJzCwP5UJB2boJ15Cmzn4aeAU4gNS9M6nUSRGxKSIKETExIt4fEY9ExKdLHLc0m3G1+P6PEXFCREzqqhXSyAoF2LIFFizIuxIza1blQuF3kn4A/D1pTMKrpMnxTiTNgTSjuuU1l2OOgX328V1IZpafbkc0R8RHSmz+PwBJBwJvqUZRzWrAAJg5E26+GV5/Hfr3z7siM2s2u31LakQ8FhGexq3CCgVYuxaWLcu7EjNrRtUap2C76aSTUgvBXUhmlgeHQo3ZZx847jiHgpnlw6FQgwoFWLECnngi70rMrNk4FGpQoZCePbrZzPqaQ6EGvfnNcPDBDgUz63sOhRokpdbC7bfDq6/mXY2ZNROHQo0qFGDjRli0KO9KzKyZOBRq1DvekdZZ8F1IZtaXHAo1avBgmDEjhUK3yxmZmVWQQ6GGFQqwZg2sXJl3JWbWLBwKNezkk9Ozu5DMrK84FGrYn/0ZTJrkUDCzvuNQqHGFAtxzDzzzTN6VmFkzcCjUsEsvTa2FCLglm4920aK03cysGrpdT8HyNWkSnHUWjBqVupDGjk3vr7km78rMrFFVpaUgaYik+ZJWSLpKkkocM0nSGklLssf4npzXTNraUgC88gr89Kdw+unpfVtb3pWZWaOqVvfROcCaiDgCGAlML3HMSOCKiJiSPR7s4XlNpa0N5syB116DF1+ExYvTOs5mZtVQrVCYBtyWvb4DKPVv25HAGZKWSrouaxX05LymsmgRXHstXHABDBoEX/gCTJkCq1blXZmZNaJqhcIo4MXs9XpgnxLHrALmRcRkYAwwtYfnIWmupHZJ7WvXrq1o4bVk0aLt1xAuvTRdbN5zT7j/fjjySPjOdzza2cwqq1qh8CwwIns9Invf2aPA7R1ej+7heUTElRHRGhGtLS0tFSq59ixbtuM1hLa2dG3hE5+AyZPhgx+Ed78bnnsu3zrNrHFUKxQWAjOy19OAUnN9ng+cLakfMAG4v4fnNY3PfGbni8ptbfClL6VptS+9FG68EQ4/HG67rfRnmJntimqFwtXA/pJWAuuA1ZIu63TM5cAc4B7g+oh4oMR5C6tUX93r1y9dZ1i6FPbeO02e96lPpem2zcx2l6LOO6VbW1ujvb097zJytWFDalVcfnlqNVx9dXo2MytF0vKIaC21zyOaG8DQofDNb8LNN6fpMFpb4Wtfg61b867MzOqNQ6GBzJoF990HM2fC+efDSSfBU0/lXZWZ1ROHQoNpaYGf/AT+4z/gl79M3UjXXZd3VWZWLxwKDUiCuXPh3nvh4IPTbavnnQcvvZR3ZWZW6xwKDexNb0qthc99Dr7/fXjb2+Duu/OuysxqmUOhwQ0cCF/8Itx5Z5ozacoUuPhiz59kZqU5FJrE8cfDihXwnvek+ZOOPx5Wr867KjOrNQ6FJjJiBFx1Ffzv/8Lvf5/mT/rudz1/kplt51BoQmefDStXpvEM550HZ57p+ZPMLHEoNKk3vjHNn/SVr8ANN8DEiZ4/ycwcCk2tf/80PcY996SupRkz0qA3z59k1rwcCsbb3gbt7fDRj6bpMSZPTiOjzaz5OBQMgGHD0oR6N90ETz8NkybB17/u+ZPMmo1DwXZw8smplVCcinvmTM+fZNZMHAq2k9Gj0wpv//7vsGRJmj/pxz/Ouyoz6wsOBStJgg99KM2fdNBBcMYZafnPl1/OuzIzqyaHgnVr/Pg0f9KFF6aBbkce6fmTzBqZQ8HKGjQorQu9ePH2+ZO+8AXPn2TWiKoSCpKGSJovaYWkqySpi+O+L+luSTdIGiBpkqQ1kpZkj/HVqM92T8f5ky6+GN7xDs+fZNZoqtVSOAdYExFHACOB6Z0PkDQFGBARxwB7ATOyY6+IiCnZ48Eq1We7qeP8SQ88kLqTvvc9z59k1iiqFQrTgOKkCXcAbSWOeRr4Rqc6RgJnSFoq6bquWhiWv+L8SUcfDXPmwFlnef4ks0ZQrVAYBbyYvV4P7NP5gIh4KCKWSjoN2AosAFYB8yJiMjAGmFrqwyXNldQuqX3t2rVV+QGsvLFjYeFC+PKX0y2sBx0El1224zGLFsGll+ZTn5ntumqFwrPAiOz1iOz9TiS9C/gEcEpEbAEeBW7Pdj8KjC51XkRcGRGtEdHa0tJSwbJtV/XvD5/9bLojae+94YIL0qyrzz+fAuGss9LoaDOrD9UKhYWkawSQupIWdT5A0n7ABUAhIoqrB58PnC2pHzABuL9K9VmFHXVUWqPh1FPhRz+CffaBE0+ECRNg+fK08tv69XlXaWblVCsUrgb2l7QSWAesltSpY4FzSV1Et2Z3Gp0HXA7MAe4Bro+IB6pUn1XBsGHwk5+kNRogrRH9yCOp9dDWli5Sv/nNcM45aeK9X/zCg+HMao2izm8baW1tjfb29rzLsEyxy+jDH4YrroBrrtneWmhv3/68Zk06XoLDDksL/hQfRxyRAsbMqkPS8ohoLbVvQF8XY42rGAjXXJNaBm1t29/PnJkeRX/60/aAaG+HBQvgBz9I+/r3h7e8ZcegmDgRhgzJ5+cyayZuKVjFXHppuqjc1uEG5EWLYNmytJhPOU89tT0kio/izWUDBqQWR8egOPzwNNrazHZNdy0Fh4LVrAh44okdu53a22HdurR/0KDUgmhtTeMlWlvhrW+FgQPzrdus1jkUrGFEwKOP7tiaWL4cXsxGxQwenEZZF1sTRx+drlkM6NRR2ttWjVk9cyhYQ9u6FR5+eOegKN7ZNHRoWnK0Y9fTk0+mOZyK1z86Xw8xa2QOBWs6W7fCQw/tGBS//jW8+mraP3x4GoG9alVaZW7xYvj2t+H009MdUWaNzKFgBrz+ehpg17E1sXRp2l40fDgcfDAccsiOj4MPhgMP3LkbyqweORTMSih2GZ15Jlx9NfzVX0G/fmk68NWr08C7TZu2H9+/fwqGzoFRDI3hw/P7Wcx2hccpmHXS+RrCmWfufE1h69Z0m2wxJDo+rrlm+11QRaNHlw6MQw5J+9wtZfXALQVrSpW4++iFF0oHxurVacR2x79ae+xRulvqkEPSbLPlbqP13VJWSe4+MutjmzalW2dLBcbDD5fuluoqNIYP37ll47ulrDfcfWTWxwYPhvHj06OzrVvhj38sHRjXXtt1t9QRR0ChAFOnwpIl8PnPp+nKH3sszUo7fLi7qKz33FIwqzEvvJBaE6VC4/HHuz5v4MAUDqNG7dpzpScfdFdX7XNLwayO7L13Wp/iqKN23F7sMnr/+9O62BddlLqd1q1LS6F2fn7kke3TgmzY0PX3DRmye2EyeHDpz5s0qeuuLqt9DgWzOtD5GsIpp2x//5d/Wf78DRt2DI2ugmTdOnjwwe3vN2/u+jP32COFQ6nAePe74V3vglmz4NZb4eKLU4tkxYo0wnzIkB2f8xz/4ZbNjhwKZnVg2bIdLyq3taX3y5b17ELz0KGw//7p0VMRaQR4V+HR+fm3v93+esuW9BnXXpuezz+/++/q3790WFTzeciQ1OVWTy2bvggwX1Mws4qKgJtugnPPhTPOSMEwb16amHDDBti4sbLPHUek76p+/VI4DBiQ5sraay946SUYNy61eAYN2vkxePCubd/dfYMHp7o63jxQqbvQ+vyagqQhwI+ANwIrgb+KTulT6hhgcLnzzKy23XknzJmT1upua0sTDxZ/cc2aVfnv27KlMuFy112pe+uww9JSsps3b3+88sqO7zs+Nm1Kz6+9VvmfDXYOi379YPp02G+/9N2Vvi25Wt1H5wBrIqIgaT4wHVjQg2PG9uA8M6thve3q2lUDBsCee6bH7lq0KNU4b15aRvZb39r1WiNSMHQOi+6CZFf2ddze3p666+bNq/yfabVCYRpwXfb6DqCNnX+5lzrmwB6cZ2Y1rFTfdnF51lrU3TKyu9Yls/1f89W0aFHqnisGWKX/bPtV7qN2MArIlj1hPbBPD4/pyXlmZhXTXcum1nQMsEsuSc9nnZW2V0q1WgrPAiOy1yOy9z05ZngPzkPSXGAuwNixYytTsZk1pXpq2fRF11y1WgoLgRnZ62lAqRwrdUxPziMiroyI1ohobWlpqVjRZma17DOf2fmXf1tbZcdTVCsUrgb2l7QSWAeslnRZmWMWdrHNzMz6SFW6jyJiE1DotPnTPTim1DYzM+sj1WopmJlZHXIomJnZNg4FMzPbpu7nPpK0FnhsN0/fly5ue61B9VQr1Fe99VQr1Fe99VQr1Fe9van1wIgoeetm3YdCb0hq72pSqFpTT7VCfdVbT7VCfdVbT7VCfdVbrVrdfWRmZts4FMzMbJtmD4Ur8y5gF9RTrVBf9dZTrVBf9dZTrVBf9Val1qa+pmBmZjtq9paCmZl10LShIGmgpBvzrqMnJH1f0t2SbpBU0+tqSxog6VpJd0n6Tt719ISk8yXdnncd5UiaJGmNpCXZY3zeNXVH0mey/29vkVTlVQZ6R9IJHf5cn5B0bt41dUXSHpJ+mv0du7TSn9+UoSBpKLCctLJbTZM0BRgQEccAe7F9Ftla9ZfAiog4Dhgj6ch8y+mepAOBmv0F0MlI4IqImJI9Hsy7oK5IOhh4a/b/7S3AATmX1K2IuLP450paCvjevGvqxvuAu7O/Y2+VdFglP7wpQyEiNkTERGBN3rX0wNPAN7LX9fDf62fAV7MWzd6kxZJq2TeAC/MuoodGAmdIWirpOqnjku41553ASEk/B44HHsm5nh6RNAw4NCJW5l1LN14AhkvqDwwFNlfyw+vhl0xTi4iHImKppNOArdT48qQR8XJEvArcBTwdEQ/nXVNXJL0XWAE8kHctPbQKmBcRk4ExwNSc6+lOC7A2It5BaiVMybmenppO7U/Zfz0wE1gN/C4iVlfywx0KdUDSu4BPAKdExJa86+mOpFGSBgPHkv6lWIPrV21TIP2L9v+AoyV9LOd6ynkUuL3D69G5VVLeeqDYvfUwsH+OteyKU4D5eRdRxoWkbsRxwD6Sjq3khzsUapyk/YALgEJEvJR3PT3wt8CZEfE68CqpeVuTIuK9WR/y2cDyiLg875rKOB84W1I/YAJwf871dGc5UJyC4VBSMNS0rDvuBOCOnEspZ09gY/Z6E2kZ44pxKNS+c0ldBbdmd0acl3dBZXwLOE/Sr4DngFtzrqeRXA7MAe4Bro+Imu32iohfAc9JWgY8GBFL866pByYBD0TExrJH5utbwIezv2NDqXB3lwevmZnZNm4pmJnZNg4FMzPbxqFgZmbbOBTMzGwbh4JZhUn6gKQP5F2H2e5wKJiZ2TYOBbMqkfRWSYsk7Zl3LWY9VdPTMJvVsTHA1cDMOhmJbga4pWBWLR8jzcJ7YN6FmO0Kh4JZdfwD8OHs2axuOBTMqmNjRDwB/D6b5dasLnjuIzMz28YtBTMz28ahYGZm2zgUzMxsG4eCmZlt41AwM7NtHApmZraNQ8HMzLb5/+dN7yln4+PzAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_elbow(df_user[['M值']]) #显示M值聚类K值手肘图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 创建和训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cluster import KMeans #导入KMeans模块\n",
    "kmeans_R = KMeans(n_clusters=3) #设定K=3\n",
    "kmeans_F = KMeans(n_clusters=4) #设定K=4\n",
    "kmeans_M = KMeans(n_clusters=4) #设定K=4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KMeans(n_clusters=4)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "kmeans_R.fit(df_user[['R值']]) #拟合模型\n",
    "kmeans_F.fit(df_user[['F值']]) #拟合模型\n",
    "kmeans_M.fit(df_user[['M值']]) #拟合模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 给R值聚类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级\n",
       "0  14681   70    7   498.95     0\n",
       "1  14682  187    2    52.00     2\n",
       "2  14684   25  390  1201.51     0\n",
       "3  14687  106   15   628.38     2\n",
       "4  14688    7  324  5579.10     0"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['R值层级'] = kmeans_R.predict(df_user[['R值']]) #通过聚类模型求出R值的层级\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R值层级</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>664.0</td>\n",
       "      <td>32.088855</td>\n",
       "      <td>25.141763</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.00</td>\n",
       "      <td>25.0</td>\n",
       "      <td>50.00</td>\n",
       "      <td>94.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>138.0</td>\n",
       "      <td>298.094203</td>\n",
       "      <td>45.436550</td>\n",
       "      <td>231.0</td>\n",
       "      <td>255.25</td>\n",
       "      <td>292.5</td>\n",
       "      <td>334.50</td>\n",
       "      <td>372.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>178.0</td>\n",
       "      <td>157.162921</td>\n",
       "      <td>37.340870</td>\n",
       "      <td>95.0</td>\n",
       "      <td>126.00</td>\n",
       "      <td>156.5</td>\n",
       "      <td>188.75</td>\n",
       "      <td>225.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count        mean        std    min     25%    50%     75%    max\n",
       "R值层级                                                                   \n",
       "0     664.0   32.088855  25.141763    0.0   10.00   25.0   50.00   94.0\n",
       "1     138.0  298.094203  45.436550  231.0  255.25  292.5  334.50  372.0\n",
       "2     178.0  157.162921  37.340870   95.0  126.00  156.5  188.75  225.0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.groupby('R值层级')['R值'].describe() #R值层级分组统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 给聚类后的层级排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义一个order_cluster函数为聚类排序\n",
    "def order_cluster(cluster_name, target_name,df,ascending=False):\n",
    "    new_cluster_name = 'new_' + cluster_name #新的聚类名称\n",
    "    df_new = df.groupby(cluster_name)[target_name].mean().reset_index() #按聚类结果分组，创建df_new对象\n",
    "    df_new = df_new.sort_values(by=target_name,ascending=ascending).reset_index(drop=True) #排序\n",
    "    df_new['index'] = df_new.index #创建索引字段\n",
    "    df_new = pd.merge(df,df_new[[cluster_name,'index']], on=cluster_name) #基于聚类名称把df_new还原为df对象，并添加索引字段\n",
    "    df_new = df_new.drop([cluster_name],axis=1) #删除聚类名称\n",
    "    df_new = df_new.rename(columns={\"index\":cluster_name}) #将索引字段重命名为聚类名称字段\n",
    "    return df_new #返回排序后的df_new对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级\n",
       "0  14681   70    7   498.95     2\n",
       "1  14682  187    2    52.00     1\n",
       "2  14684   25  390  1201.51     2\n",
       "3  14687  106   15   628.38     1\n",
       "4  14688    7  324  5579.10     2"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = order_cluster('R值层级', 'R值', df_user, False) #调用簇排序函数\n",
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #根据用户码排序\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R值层级</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>138.0</td>\n",
       "      <td>298.094203</td>\n",
       "      <td>45.436550</td>\n",
       "      <td>231.0</td>\n",
       "      <td>255.25</td>\n",
       "      <td>292.5</td>\n",
       "      <td>334.50</td>\n",
       "      <td>372.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>178.0</td>\n",
       "      <td>157.162921</td>\n",
       "      <td>37.340870</td>\n",
       "      <td>95.0</td>\n",
       "      <td>126.00</td>\n",
       "      <td>156.5</td>\n",
       "      <td>188.75</td>\n",
       "      <td>225.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>664.0</td>\n",
       "      <td>32.088855</td>\n",
       "      <td>25.141763</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.00</td>\n",
       "      <td>25.0</td>\n",
       "      <td>50.00</td>\n",
       "      <td>94.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count        mean        std    min     25%    50%     75%    max\n",
       "R值层级                                                                   \n",
       "0     138.0  298.094203  45.436550  231.0  255.25  292.5  334.50  372.0\n",
       "1     178.0  157.162921  37.340870   95.0  126.00  156.5  188.75  225.0\n",
       "2     664.0   32.088855  25.141763    0.0   10.00   25.0   50.00   94.0"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.groupby('R值层级')['R值'].describe() #R值层级分组统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 继续给F、M值聚类，并排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F值层级</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>720.0</td>\n",
       "      <td>32.277778</td>\n",
       "      <td>24.128263</td>\n",
       "      <td>1.0</td>\n",
       "      <td>12.00</td>\n",
       "      <td>27.0</td>\n",
       "      <td>48.25</td>\n",
       "      <td>92.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>203.0</td>\n",
       "      <td>152.960591</td>\n",
       "      <td>50.338738</td>\n",
       "      <td>93.0</td>\n",
       "      <td>113.50</td>\n",
       "      <td>138.0</td>\n",
       "      <td>191.50</td>\n",
       "      <td>279.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>50.0</td>\n",
       "      <td>417.080000</td>\n",
       "      <td>109.618232</td>\n",
       "      <td>289.0</td>\n",
       "      <td>329.75</td>\n",
       "      <td>390.0</td>\n",
       "      <td>492.50</td>\n",
       "      <td>710.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.0</td>\n",
       "      <td>1281.000000</td>\n",
       "      <td>515.121345</td>\n",
       "      <td>887.0</td>\n",
       "      <td>996.50</td>\n",
       "      <td>1112.0</td>\n",
       "      <td>1304.50</td>\n",
       "      <td>2366.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count         mean         std    min     25%     50%      75%     max\n",
       "F值层级                                                                        \n",
       "0     720.0    32.277778   24.128263    1.0   12.00    27.0    48.25    92.0\n",
       "1     203.0   152.960591   50.338738   93.0  113.50   138.0   191.50   279.0\n",
       "2      50.0   417.080000  109.618232  289.0  329.75   390.0   492.50   710.0\n",
       "3       7.0  1281.000000  515.121345  887.0  996.50  1112.0  1304.50  2366.0"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['F值层级'] = kmeans_F.predict(df_user[['F值']]) #通过聚类模型求出F值的层级\n",
    "df_user = order_cluster('F值层级', 'F值',df_user,True) #调用簇排序函数\n",
    "df_user.groupby('F值层级')['F值'].describe() #F值层级分组统计信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "      <th>F值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级  F值层级\n",
       "0  14681   70    7   498.95     2     0\n",
       "1  14682  187    2    52.00     1     0\n",
       "2  14684   25  390  1201.51     2     2\n",
       "3  14687  106   15   628.38     1     0\n",
       "4  14688    7  324  5579.10     2     2"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #根据用户码排序\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "      <th>F值层级</th>\n",
       "      <th>M值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级  F值层级  M值层级\n",
       "0  14681   70    7   498.95     2     0     0\n",
       "1  14682  187    2    52.00     1     0     0\n",
       "2  14684   25  390  1201.51     2     2     0\n",
       "3  14687  106   15   628.38     1     0     0\n",
       "4  14688    7  324  5579.10     2     2     1"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['M值层级'] = kmeans_M.predict(df_user[['M值']]) #通过聚类模型求出M值的层级\n",
    "df_user = order_cluster('M值层级', 'M值',df_user,True) #调用簇排序函数\n",
    "df_user.groupby('M值层级')['M值'].describe() #M值层级分组统计信息\n",
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #根据用户码排序\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 为用户整体分组画像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_user['总分'] = df_user['R值层级'] + df_user['F值层级'] + df_user['M值层级'] #求出每个用户RFM总分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "      <th>F值层级</th>\n",
       "      <th>M值层级</th>\n",
       "      <th>总分</th>\n",
       "      <th>总体价值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>高价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>975</th>\n",
       "      <td>16015</td>\n",
       "      <td>3</td>\n",
       "      <td>181</td>\n",
       "      <td>704.55</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>976</th>\n",
       "      <td>16016</td>\n",
       "      <td>2</td>\n",
       "      <td>224</td>\n",
       "      <td>1465.51</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>16017</td>\n",
       "      <td>46</td>\n",
       "      <td>32</td>\n",
       "      <td>211.88</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>16018</td>\n",
       "      <td>38</td>\n",
       "      <td>28</td>\n",
       "      <td>408.90</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>16019</td>\n",
       "      <td>46</td>\n",
       "      <td>160</td>\n",
       "      <td>3786.24</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>980 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码   R值   F值       M值  R值层级  F值层级  M值层级  总分 总体价值\n",
       "0    14681   70    7   498.95     2     0     0   2  低价值\n",
       "1    14682  187    2    52.00     1     0     0   1  低价值\n",
       "2    14684   25  390  1201.51     2     2     0   4  中价值\n",
       "3    14687  106   15   628.38     1     0     0   1  低价值\n",
       "4    14688    7  324  5579.10     2     2     1   5  高价值\n",
       "..     ...  ...  ...      ...   ...   ...   ...  ..  ...\n",
       "975  16015    3  181   704.55     2     1     0   3  中价值\n",
       "976  16016    2  224  1465.51     2     1     0   3  中价值\n",
       "977  16017   46   32   211.88     2     0     0   2  低价值\n",
       "978  16018   38   28   408.90     2     0     0   2  低价值\n",
       "979  16019   46  160  3786.24     2     1     1   4  中价值\n",
       "\n",
       "[980 rows x 9 columns]"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#在df_user对象中添加总体价值这个字段\n",
    "df_user.loc[(df_user['总分']<=2) & (df_user['总分']>=0), '总体价值'] = '低价值' \n",
    "df_user.loc[(df_user['总分']<=4) & (df_user['总分']>=3), '总体价值'] = '中价值' \n",
    "df_user.loc[(df_user['总分']<=8) & (df_user['总分']>=5), '总体价值'] = '高价值'\n",
    "df_user #显示df_user"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x22842bd83a0>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示高、中、低价值组分布散点图（F值与M值）\n",
    "plt.scatter(df_user.query(\"总体价值 == '高价值'\")['F值'],\n",
    "                   df_user.query(\"总体价值 == '高价值'\")['M值'],c='g',marker='*')\n",
    "plt.scatter(df_user.query(\"总体价值 == '中价值'\")['F值'],\n",
    "                   df_user.query(\"总体价值 == '中价值'\")['M值'],marker=8)\n",
    "plt.scatter(df_user.query(\"总体价值 == '低价值'\")['F值'],\n",
    "                   df_user.query(\"总体价值 == '低价值'\")['M值'],c='r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
